/***********************************************************************************
 * 文件名： lcd_type.h
 * 作者： 刘言
 * 版本： 1
 * 说明：
 *      lcd驱动的类型定义
 * 修改记录：
 * 	2024/01/09: 初版。 刘言。
***********************************************************************************/
#ifndef _LCD_TYPE_H_
#define _LCD_TYPE_H_

#include "lcd_config.h"
#include "typedef.h"

// 自定义类型

#if (LCD_COLOR_BITS == 1)
typedef bool lcd_color_t;
#elif (LCD_COLOR_BITS == 8)
typedef union {
    struct {
        uint8_t Blue : 2;
        uint8_t Green : 3;
        uint8_t Red : 3;
    } Ch;
    uint8_t Full;
} lcd_color_t;
#elif (LCD_COLOR_BITS == 16)
typedef union {
    struct {
#if LCD_COLOR_16_SWAP == 0
        uint16_t Blue : 5;
        uint16_t Green : 6;
        uint16_t Red : 5;
#else
        uint16_t Green_h : 3;
        uint16_t Red : 5;
        uint16_t Blue : 5;
        uint16_t Green_l : 3;
#endif
    } Ch;
    uint16_t Full;
} lcd_color_t;
#elif (LCD_COLOR_BITS == 32)
typedef union {
    struct {
        uint8_t Blue;
        uint8_t Green;
        uint8_t Red;
        uint8_t Alpha;
    } Ch;
    uint32_t Full;
} lcd_color_t;
#endif


typedef struct _lcd_font
{
    u8 WordSpace;       // 字间距
    u8 LineSpace;       // 行间距，自动换行时采取的行间距
    u8 AsciiHeight;     // ASCII 字符高度
    u8 AsciiWidth;      // ASCII 字符宽度
#ifdef LCD_USE_CH_CHAR
    u8 ChHeight;        // 中文字符高度
    u8 ChWidth;         // 中文字符宽度
    u16 ChNum;          // 支持的中文字符数量
#endif
    const u8 * AsciiLib;      // ASCII 字符点阵数据，0x20~0x7e（96个ASCII字符）
#ifdef LCD_USE_CH_CHAR
    const u16 * ChCodeList;   // 支持的汉字码列表,与点阵数据对应排列
    const u8 * ChLib;         // 中文字符点阵数据
#endif
}lcd_font_t;

typedef enum _lcd_font_mode
{
    LCD_FM_TRANS,   // 背景透明（不画背景）
    LCD_FM_OPAQUE   // 背景不透明（使用背景色填充背景）
}lcd_font_mode_t;


#endif
